home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 3: Developer Tools / Linux Cubed Series 3 - Developer Tools.iso / devel / lang / lisp / gcl-1.000 / gcl-1 / gcl-1.0 / dos / signal.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-11-23  |  3.1 KB  |  110 lines

  1. /* This is file signal.c
  2. **
  3. ** Copyright (C) 1992 Rami EL CHARIF and William SCHELTER
  4. ** rcharif@ma.utexas.edu   wfs@cs.utexas.edu
  5. **
  6. ** Signal package for djgpp versions 1.05, 1.06
  7. ** version 0.0 alpha  03/30/1992
  8. **
  9. ** Send your comments or bugs report to
  10. ** rcharif@ma.utexas.edu or wfs@cs.utexas.edu
  11. **
  12. ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
  13. ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  14. */
  15.  
  16. #include <stdio.h>
  17. #include <dos.h>
  18. #include <signal.h>
  19.  
  20. unsigned long SignalTable[_NSIG + 1] = {
  21.    (unsigned long)SIG_DFL,       /* SIGHUP       */
  22.    (unsigned long)SIG_DFL,       /* SIGINT      +*/
  23.    (unsigned long)SIG_DFL,       /* SIGQUIT       */
  24.    (unsigned long)SIG_DFL,       /* SIGILL       */
  25.    (unsigned long)SIG_DFL,       /* SIGABRT       */
  26.    (unsigned long)SIG_DFL,       /* SIGTRAP       */
  27.    (unsigned long)SIG_DFL,       /* SIGIOT       */
  28.    (unsigned long)SIG_DFL,       /* SIGEMT       */
  29.    (unsigned long)SIG_DFL,       /* SIGFPE       */
  30.    (unsigned long)SIG_DFL,       /* SIGKILL       */
  31.    (unsigned long)SIG_DFL,       /* SIGBUS       */
  32.    (unsigned long)SIG_DFL,       /* SIGSEGV      +*/
  33.    (unsigned long)SIG_DFL,       /* SIGSYS       */
  34.    (unsigned long)SIG_DFL,       /* SIGPIPE       */
  35.    (unsigned long)SIG_DFL,       /* SIGALRM       */
  36.    (unsigned long)SIG_DFL,       /* SIGTERM       */
  37.    (unsigned long)SIG_DFL,       /* SIGURG       */
  38.    (unsigned long)SIG_DFL,       /* SIGSTOP       */
  39.    (unsigned long)SIG_DFL,       /* SIGTSTP       */
  40.    (unsigned long)SIG_DFL,       /* SIGCONT       */
  41.    (unsigned long)SIG_DFL,       /* SIGCHLD       */
  42.    (unsigned long)SIG_DFL,       /* SIGCLD       */
  43.    (unsigned long)SIG_DFL,       /* SIGTTIN       */
  44.    (unsigned long)SIG_DFL,       /* SIGTTOU       */
  45.    (unsigned long)SIG_DFL,       /* SIGIO       */
  46.    (unsigned long)SIG_DFL,       /* SIGPOLL       */
  47.    (unsigned long)SIG_DFL,       /* SIGXCPU       */
  48.    (unsigned long)SIG_DFL,       /* SIGXFSZ       */
  49.    (unsigned long)SIG_DFL,       /* SIGVTALRM    */
  50.    (unsigned long)SIG_DFL,       /* SIGPROF       */
  51.    (unsigned long)SIG_DFL,       /* SIGWINCH    */
  52.    (unsigned long)SIG_DFL,       /* SIGUSR1       */
  53.    (unsigned long)SIG_DFL        /* SIGUSR2       */
  54.    };
  55.  
  56. SignalHandler signal(int sig, SignalHandler action)
  57. {
  58.  extern void SignalManager();
  59.  union REGS in, out;
  60.  SignalHandler hsigOld;
  61.  
  62.    in.h.ah = 1;
  63.    in.h.al = sig;
  64.    SignalTable[sig] = in.x.dx = (long)action;
  65.    in.x.cx = (long)SignalManager;
  66.    int86(0xfa, &in, &out);
  67.    hsigOld = (SignalHandler)out.x.dx;
  68.    return hsigOld;
  69. }
  70.  
  71. void SigInst()
  72. {
  73.  union REGS in, out;
  74.  extern void SignalManager();
  75.  
  76.    in.h.ah = 0;
  77.    in.h.al = 0;
  78.    in.x.dx = (long)SignalManager;
  79.  
  80. #ifdef DEBUG_SIG
  81.    printf("\nSignal Manager = %ld, %lx", in.x.dx, in.x.dx);
  82. #endif
  83.  
  84.    int86(0xfa, &in, &out);
  85.  
  86. }
  87.  
  88. #ifndef NO_SIG_ALARM
  89. unsigned int alarm(int culSeconds)
  90. {
  91.  
  92.  union REGS in, out;
  93.  
  94.    if (!culSeconds) {
  95.       in.h.ah = 3;   /* Reset alarm */
  96.       int86(0xfa, &in, &out);
  97.       }
  98.    else {
  99.       in.h.ah = 2;
  100.       in.x.dx = culSeconds;
  101.       int86(0xfa, &in, &out);
  102.       }
  103.    return in.x.cx;
  104. }
  105. #else
  106. unsigned int alarm(int n)
  107. {  return 0; }
  108. #endif
  109.  
  110.